package dht.routage;



import dht.data.TabBigInteger;
import dht.node.Node;

public class SimpleRouter extends RoutingStrategy {

	/**
	 * Fonction de routage qui retourne un indice dans la liste des voisins,
	 * l'indice du voisin le plus proche de la destination, si ce voisin
	 * n'existe pas, on choisit un voisin aleatoire.
	 * @param t la destination.
	 * @return l'indice dans la liste des voisins.
	 */
	public int route(TabBigInteger t) {

		synchronized(Node.myContext){

			int sizeV = Node.myContext.getVoisinage().size();

			for(int i=0; i<sizeV; i=i+1){
				if(t.getValue(i/2).compareTo(Node.myContext.getZoneLocale().get(i/2).getElem1()) < 0){

					if(Node.myContext.getVoisinage().get(i).size() > 0) 
						return i;
				}
				else if(t.getValue(i/2).compareTo(Node.myContext.getZoneLocale().get(i/2).getElem2()) > 0) {

					if(Node.myContext.getVoisinage().get(i+1).size() > 0) 
						return i+1;
				}
			}
			
			for(int i=0 ; i<sizeV; i++){
				if(Node.myContext.getVoisinage().get(i).size() > 0) 
					return i;
			}
			
			return -1;
		}
	}
}
